//1
var page = {
    data : {
        indexUrl    : "/s/xdhz/",   //主页
        liIndex     : 1,            //li中选中的
        pageIndex   : 1,            //第几页
        lis         : null,
        per         : 6,            //分页栏页码数量
        all         : 13,           //总页数
        listUrl     : "",           //列表请求的api
        listPath    : "",           //列表位于的路径
        articleUrl  : "",           //article的页面url
        isShowList  : false,         //显示list还是article
        isGetPageNum: false,        //获取到pageNum的值
        path        : [],
    },
    displayMenu : function(contentUrl){
        var arr = contentUrl.split("/");
        var path = arr[arr.length-1].split(".")[0];
        var da = document.querySelector("a[path='"+path+"']");
        this.data.path.push(da.innerText);
        if(da!=null){
            var dd = da.parentElement;
            while(dd.tagName.toLocaleLowerCase() !== "div"){
                dd = dd.parentElement;
            }
            dd.classList.add("expan");
            console.log(dd.firstChild);
        }
    },
    init : function(){

        /**
         * 初始化页面
         */
        this.initPath();
        this.initContent();
        /**
         * 绑定事件
         */
        this.bindClickMenu();
        this.bindClickList();
        this.bindChangePage();
        this.bindTurnPage();
        this.refreshPath();
    },
    initPath : function(){
        this.data.path.push("首页");
    },
    initContent : function(){
        //获取参数
        var type = new RegExp("(^|&)type=([^&]*)(&|$)", "i");
        var contentUrl = new RegExp("(^|&)contentUrl=([^&]*)(&|$)", "i"); 
        var rType = window.location.search.substr(1).match(type); 
        var rContentUrl = window.location.search.substr(1).match(contentUrl); 
        //渲染页面
        if(rType!==null && rContentUrl!==null && rType[2]==="list" ){
            this.switchContentType("block");
            this.data.listUrl = rContentUrl[2];
            this.data.listPath = '/' + rContentUrl[2].match(/[a-zA-Z]+(?=\/||)/g)[2];
            this.refreshContent();
        }else if(rType!==null && rContentUrl!==null && rType[2]==="article" ){
            this.switchContentType("none");
            this.data.articleUrl = rContentUrl[2];
            this.refreshContent("noReturn");
        }
        this.displayMenu(rContentUrl[2]);
    },
    initContentPage : function(){
        this.data.lis = document.querySelectorAll(".pages li");
        document.querySelectorAll(".page-num span")[1].innerText = this.data.all;
        document.querySelector(".page-form-input").max = this.data.all;
        var article = document.querySelector(".content.article");
        article.style.display = "none";
        this.writePageNum();
    },
    /*
    *刷新路径
    */
    refreshPath : function(){
        _this = this;
        var path = document.querySelector(".path ul");
        path.innerHTML = "";
        this.data.path.forEach(function(ele,index){
            var li = document.createElement("li");
            if(index !== _this.data.path.length-1){
                ele += ">";
            }
            li.innerText = ele;
            path.appendChild(li);    
        }); 
    },
    /**
     * 绑定点击返回列表
     */
    bindReturnList : function(){
        var _this = this;
        var ret = document.getElementsByClassName("return-list")[0];
        ret.onclick = function(){
            _this.switchContentType("block");
            _this.data.path.pop();
            _this.refreshPath();
        };
    },
    /**
     * 刷新content页面
     */
    refreshContent : function(noReturn){
        //获取数据
        if(this.data.isShowList){
            _this = this;
            $.get(this.data.listUrl,function(data){
                $(".list .list-info")
                .empty()
                .html(data);
                if(!_this.data.isGetPageNum){
                    var regStr = /^共(\d*)条记录/;
                    var pageStr = $(".list .pagination")[0].innerText;
                    _this.data.all = Math.ceil(parseInt(regStr.exec(pageStr)[1])/20);
                    _this.initContentPage();
                    _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                    _this.data.liIndex = 1;
                    _this.data.pageIndex = 1;
                    _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                    _this.checkPage();
                    _this.data.isGetPageNum = true;
                }
                if($(".list .pagination")[0].remove){
                    $(".list .pagination")[0].remove();
                }else{
                    $(".list .pagination")[0].innerHTML = '';
                }
                
            });
        }else{
            _this = this;
            $.get(this.data.articleUrl,function(data){
                
                if(typeof noReturn === 'undefined'){
                    $(".article").empty()
                        .html(data)
                        .append(
                            '<div class="next">'+
                                '<span class="return-list">返回列表</span>'+
                            '</div>'
                        );
                }else{
                    $(".article").empty()
                    .html(data)
                    .append(
                        '<div class="next" style="display:none;">'+
                            '<span class="return-list">返回列表</span>'+
                        '</div>'
                    );
                }
                _this.bindReturnList();
            });
        }
        
    },
    /**
     * 点击菜单事件
     */
    bindClickMenu : function(){
        var _this = this;
        var menu = document.getElementById("menu");
        var all = document.querySelectorAll(".menu div");
        menu.onclick = function(e){
            //展开菜单
            /*
            if(e.target.tagName.toLowerCase() == "p"){
                var newDiv = e.target.parentNode;
                var oldDiv = document.getElementsByClassName("expan")[0];
                if(oldDiv != null && newDiv != oldDiv ){
                    oldDiv.classList.remove("expan")
                }   
                newDiv.classList.toggle("expan");
            }*/
            //点击子菜单获取数据
            if(e.target.tagName.toLowerCase() === "a"
                && e.target.getAttribute("path") && !e.target.getAttribute("alone"))
            {
                //获取请求路径
                var path = e.target.getAttribute("path");
                var url = _this.data.indexUrl + path;
                _this.data.listPath = path;
                _this.data.listUrl = _this.data.indexUrl + path + "/index.html";
                _this.switchContentType("block");
                _this.data.isGetPageNum = false;
                _this.refreshContent();

                //刷新导航路径
                _this.data.path = [];
                _this.data.path.push("首页");
                _this.data.path.push(e.target.innerText.trim());
                _this.refreshPath();
            }
            if(e.target.tagName.toLowerCase() === "a"
                && e.target.getAttribute("path") && e.target.getAttribute("alone"))
            {
                //获取路径
                var path = e.target.getAttribute("path");
                var url = _this.data.indexUrl + path + ".html";
                _this.data.articleUrl = url;
                _this.switchContentType("none");
                _this.refreshContent("noReturn");
                //刷新导航路径
                _this.data.path = [];
                _this.data.path.push("首页");
                _this.data.path.push(e.target.innerText.trim());
                _this.refreshPath();
            }   
        }
    },
    /**
     *绑定点击列表事件 
     */
    bindClickList : function(){
        var list = document.querySelector(".content .list-info");
        _this = this;
        list.onclick = function(e){
            if(e.target.tagName.toLowerCase() != "span" || !e.target.getAttribute("url")){
                return;
            }
            var url = e.target.getAttribute("url");
            _this.data.articleUrl = url;
            _this.data.isShowList = false;
            _this.refreshContent();
            _this.switchContentType("none");
            //刷新导航路径
            _this.data.path.push(e.target.innerText.trim());
            _this.refreshPath();
        }
    },
    /**
     * 载入时写入页面码数到input框
     */
    writePageNum : function(){
        var curPageNum = parseInt(document.querySelector(".cur-page").innerText);
        var pageInput = document.querySelector(".page-form-input");
        pageInput.value = curPageNum;
    },
    /**
     * 点击page按钮事件
     */
    bindChangePage : function(){
        var _this = this;
        var pages = document.querySelector(".pages");
        pages.onclick = function(e){
            var cur = e.target;
            if(cur.tagName.toLowerCase() != "li" || cur.classList.contains("cur-page") || cur.classList.contains("no-page")){
                return;
            }
            if(cur.id == "prev-page"){
                pagePrev();
            }else if(cur.id == "next-page"){
                pageNext();
            }else{
                switchPage();
            }  
            _this.checkPage();
            _this.writePageNum();
            if(_this.data.pageIndex!=1){
                _this.data.listUrl = _this.data.indexUrl 
                + _this.data.listPath + "/index_" + _this.data.pageIndex +".html";
            }else{
                _this.data.listUrl = _this.data.indexUrl 
                + _this.data.listPath + "/index.html";
            }
            
            _this.refreshContent();
            /*
             * 相关函数
             */  
            function pagePrev(){
                if(_this.data.liIndex != 1){
                    _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                    _this.data.liIndex --;
                    _this.data.pageIndex --;
                    _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                }else{
                    var begin = (_this.data.pageIndex-_this.data.per) > 0 ? (_this.data.pageIndex-_this.data.per) : 1 ;
                    for(var i=1;i<=_this.data.per;i++){
                        _this.data.lis[i].innerText = begin + i - 1;
                    }
                    var offset = 1 -(_this.data.pageIndex-_this.data.per) > 0 ?  1 -(_this.data.pageIndex-_this.data.per) : 0;
                    _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                    _this.data.liIndex = _this.data.per - offset;
                    _this.data.pageIndex --;
                    _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                }
            }
            function pageNext(){
                if(_this.data.liIndex != _this.data.per){
                    _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                    _this.data.liIndex ++;
                    _this.data.pageIndex ++;
                    _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                }else{
                    var end = (_this.data.pageIndex+_this.data.per) < _this.data.all ? (_this.data.pageIndex+_this.data.per) : _this.data.all ;
                    for(var i=_this.data.per;i>0;i--){
                        _this.data.lis[i].innerText = end--;
                    }
                    var offset = _this.data.pageIndex+_this.data.per - _this.data.all > 0 ? _this.data.pageIndex+_this.data.per - _this.data.all : 0; 
                    _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                    _this.data.liIndex = 1 + offset;
                    _this.data.pageIndex ++;
                    _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                }
            }
            function switchPage(){
                var newPageIndex = parseInt(cur.innerText);
                _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
                _this.data.liIndex = _this.data.liIndex + (newPageIndex - _this.data.pageIndex);
                _this.data.lis[_this.data.liIndex].classList.add("cur-page");
                _this.data.pageIndex = newPageIndex;
            }
        }
        
    },
    /**
     * 检查是否有上一页，下一页
     */
    checkPage : function(){
        //检查上一页下一页按钮
        if(this.data.pageIndex >= this.data.all){
            this.data.lis[this.data.per+1].classList.add("no-page");
        }else{
            this.data.lis[this.data.per+1].classList.remove("no-page");
        }
        if(this.data.pageIndex <= 1){
            this.data.lis[0].classList.add("no-page");
        }else{
            this.data.lis[0].classList.remove("no-page");
        }
        //是否产生省略号
        if(this.data.pageIndex + this.data.per - this.data.liIndex >= this.data.all){
            this.data.lis[this.data.per+1].classList.add("no-dots");
        }else{
            this.data.lis[this.data.per+1].classList.remove("no-dots");
        }
        if(this.data.pageIndex - this.data.liIndex <= 0){
            this.data.lis[0].classList.add("no-dots");
        }else{
            this.data.lis[0].classList.remove("no-dots");
        }
        //禁用后面的列表
        for(var i = 1;i<=_this.data.per - _this.data.liIndex;i++){
            if(_this.data.pageIndex + i > _this.data.all){
                this.data.lis[_this.data.liIndex+i].classList.add("no-page");
            }else{
                this.data.lis[_this.data.liIndex+i].classList.remove("no-page");
            }       

        }
        
    },
    /**
     *点击按钮跳转 
     */
    bindTurnPage : function(){
        var _this = this;
        var submit = document.querySelector(".page-form-submit");
        submit.onclick = function(){
            var newPageIndex = parseInt(document.querySelector(".page-form-input").value);
            var offset = _this.data.per/2;
            var begin;  //页码列表里起始数
            if(newPageIndex == _this.data.pageIndex){
                return;     //页数未改变不反应
            }

            if(newPageIndex - offset < 1){
                begin = 1;
            }else if(newPageIndex + _this.data.per - 1 >= _this.data.all){
                begin = _this.data.all - _this.data.per + 1;
            }else{
                begin = newPageIndex - offset;
            }
            for(var i=0;i<_this.data.per;i++){
                _this.data.lis[i+1].innerText = begin + i;
            }

            _this.data.lis[_this.data.liIndex].classList.remove("cur-page");
            _this.data.liIndex = newPageIndex - begin + 1;
            _this.data.pageIndex = newPageIndex;
            _this.data.lis[_this.data.liIndex].classList.add("cur-page");
            _this.checkPage();
            //刷新列表页面
            if(_this.data.pageIndex!=1){
                _this.data.listUrl = _this.data.indexUrl 
                + _this.data.listPath + "/index_" + _this.data.pageIndex +".html";
            }else{
                _this.data.listUrl = _this.data.indexUrl 
                + _this.data.listPath + "/index.html";
            }     
            _this.refreshContent();
        }
    },
    /**
     * 切换列表和文章
     */
    switchContentType : function(type){
        //该type为list的显示与隐藏，article部分与type相反
        var list = document.querySelector(".content.list");
        var article = document.querySelector(".content.article");
        article.style.display = type == "none" ? "block" : "none";
        list.style.display = type;
        this.data.isShowList = type == "none" ? false : true;
    }
}
page.init();


